﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

public partial class Kostenplaatsen : System.Web.UI.Page
{
    KostenPlaatsenController kpc;
    public Kostenplaatsen()
    {
        kpc = new KostenPlaatsenController();
    }

    private void treeView_SelectedNodeChanged(object sender, EventArgs e)
    {

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            
            MakeTree();
        }
    }

    private void MakeTree()
    {

        treeView.Nodes.Clear();
        KostenPlaats root = kpc.GetTree();
        TreeNode addedNode = new TreeNode(root.Kostenplaats);
        addedNode.Value = root.idKostenplaats.ToString(); 
        // Betere oplossing voor stuk hierboven:
        //
        // Subclass maken van TreeNode zodat controle op het type van de Node kan gebeuren en niet op de text,
        // zo kan ook de KostenPlaats volledig opgeslagen worden in de node i.p.v. enkel het Id.
        // Implementatie was te uitgebreid om in deze demoapp te verwerken. (TreeView.SelectedNode verliest 
        // precies informatie over de TreeNode zelf, waarschijnlijk moet ook met een custom TreeView gewerkt
        // worden dus.                                                          
        addedNode.Expand();
        treeView.Nodes.Add(addedNode);
        treeView.Nodes[0].NavigateUrl = "";
        AddChildrenToNode(root, treeView.Nodes[0]);
    }

    private void AddChildrenToNode(KostenPlaats parent,TreeNode node)
    {
        foreach (KostenPlaats kp in parent.GetChildren())
        {
            TreeNode addedNode = new TreeNode(kp.Kostenplaats);
            addedNode.Value = kp.idKostenplaats.ToString();
            node.ChildNodes.Add(addedNode);
            AddChildrenToNode(kp, addedNode);
        }
        AddNewNode addNewNode = new AddNewNode();           
        node.ChildNodes.Add((AddNewNode)addNewNode);
        if (!parent.HasChildren())
            node.Collapse();
        else node.Expand();
    }

    protected void treeView_SelectedNodeChanged1(object sender, EventArgs e)
    {        
        if (treeView.SelectedNode.Text == "Add new...") // Controle zou eignelik moeten gebeuren het type van de TreeNode, zie probleem boven.
        {
            txtAddNew.Visible = true;
            btnAddNew.Visible = true;
        }
        else 
        {
            txtAddNew.Visible = false;
            btnAddNew.Visible = false;
        }
    }
    protected void btnAddNew_Click(object sender, EventArgs e)
    {
        if (txtAddNew.Text != "")
        {
            kpc.AddNewChildToNode(int.Parse(treeView.SelectedNode.Parent.Value), txtAddNew.Text); // Hierbij zou de Parent de Kostenplaats moeten bevatten i.p.v. enkel het Id.
            txtAddNew.Visible = false;
            btnAddNew.Visible = false;
            txtAddNew.Text = "";
            MakeTree();
        }
    }
}